<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">

    <#if baseResultMap>
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="com.cyh.${package.Entity}.${entity}">
            <#list table.fields as field>
                <#if field.keyFlag><#--生成主键排在第一位-->
                    <id column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
            <#list table.commonFields as field><#--生成公共字段 -->
                <result column="${field.name}" property="${field.propertyName}" />
            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag><#--生成普通字段 -->
                    <result column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
        </resultMap>

    </#if>
    <#if baseColumnList>
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            <#list table.commonFields as field>
                ${field.columnName},
            </#list>
            ${table.fieldNames}
        </sql>

    </#if>

    <insert id="insert"
            useGeneratedKeys="true"
            parameterType="com.cyh.${package.Entity}.${entity}">
        insert into ${table.name}(
        <#list table.fields as field>
            <if test="${field.propertyName} != null and ${field.propertyName} != ''">
                ${field.propertyName}<#if field_has_next>,</#if>
            </if>
        </#list>
        )values(
        <#list table.fields as field>
            <if test="${field.propertyName} != null and ${field.propertyName} != ''">
                <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse><#if field_has_next>,</#if>
            </if>
        </#list>
        )
    </insert>

    <select id="getByKey"
            parameterType="com.cyh.${package.Entity}.${entity}"
            resultType="com.cyh.${package.Entity}.${entity}">
        select
        <include refid="Base_Column_List" />
        from
        ${table.name} v
        where
                1 = 1
        <#list table.fields as field>
            <#if field.keyFlag><#--生成主键排在第一位-->
                and v.${field.propertyName} = <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse>
            </#if>
        </#list>
    </select>

    <select id="get"
            parameterType="com.cyh.${package.Entity}.${entity}"
            resultType="com.cyh.${package.Entity}.${entity}">
        select
        <#list table.fields as field>
            v.${field.propertyName}<#if field_has_next>,</#if>
        </#list>
        from
        ${table.name} v
        where
        1 = 1
        <#list table.fields as field>
            <if test="${field.propertyName} != null and ${field.propertyName} != ''"> and v.${field.propertyName} = <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse></if>
        </#list>
    </select>



    <update id="update"
            parameterType="com.cyh.${package.Entity}.${entity}">
        update ${table.name} v
        set v.${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
        <#list table.fields as field>
            <#if field.propertyName == "${package.ModuleName}_id">
            <#else>
                <if test="${field.propertyName} != null and ${field.propertyName} != ''"> , v.${field.propertyName} = <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse></if>
            </#if>
        </#list>
        where v.${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
    </update>

    <delete id="deleteByKey"
            parameterType="java.lang.String">
        delete from ${table.name}
        where ${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
    </delete>

    <delete id="deleteByWhere"
            parameterType="java.lang.String">
        delete from ${table.name}
        where ${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
    </delete>


</mapper>

